/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package negocio;

import dao.Dao;
import dao.FuncionarioJpaController;
import dominio.Funcionario;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author igo
 */
public class FuncionarioNegocio implements Negocio{
    private Dao dao;
    private String mensagem;

    public FuncionarioNegocio() {
        dao = new FuncionarioJpaController();
    }

    /**
     *  Esta função insere o objeto Funcionario parâmetro no banco de dados
     * @param funcionario
     */
    public boolean inserir(Object objeto) {
        if(objeto == null){
            mensagem = "Funcionário nulo";
            return false;
        }
        Funcionario funcionario = (Funcionario) objeto;
        if (camposObrigatorios(funcionario) == 9) {
            if (funcionario.getId() == null) {
                dao.create(funcionario);
                mensagem = "Funcionario inserido com sucesso!";
                return true;
            }else{
                mensagem = "Funcionario já existe";
            }
        } else {
            mensagem = "Preencha todos os campos obrigatórios";
        }
        return false;
    }

    /**
     *  Esta função atualiza o banco de dados com as informações do objeto Funcionario fornecido como parâmetro
     * @param funcionario
     */
    public boolean alterar(Object objeto) {
        if(objeto == null){
            mensagem = "Funcionário nulo";
            return false;
        }
        Funcionario funcionario = (Funcionario) objeto;
        if (camposObrigatorios(funcionario) == 9) {
            if (funcionario.getId() != null) {
                try {
                    dao.edit(funcionario);
                    mensagem = "Funcionário Alterados com sucesso!";
                    return true;
                } catch (Exception e) {
                    mensagem = "Erro no Banco de Dados. Tente novamente, mais tarde!";
                }
            } else {
                mensagem = "Funcionario não existe!";
            }
        } else {
            mensagem = "Campo Obrigatório em branco!";
        }
        return false;
    }

    /**
     *
     * @param Funcionario funcionario
     * @return o número de campos obrigatórios preenchidos
     */
    private int camposObrigatorios(Funcionario funcionario) {
        int i = 0;
        if (funcionario != null) {
            if (!funcionario.getNomeFuncionario().equals("")) {
                i++;
            }
            if (!funcionario.getCep().equals("")) {
                i++;
            }
            if (!funcionario.getOrgaoExpedidor().equals("")) {
                i++;
            }
            if (!funcionario.getCpf().equals("")) {
                i++;
            }
            if (!funcionario.getEnderecoFuncionario().equals("")) {
                i++;
            }
            if (!funcionario.getRg().equals("")) {
                i++;
            }
            if (funcionario.getSexo() != -1) {
                i++;
            }
            if (!funcionario.getTelefone().equals("")) {
                i++;
            }
            if (!funcionario.getCidade().equals("")) {
                i++;
            }
        }
        return i;
    }

    /**
     * Método que exclui um objeto funcionário do banco de dados por meio de seu id
     *
     * @param funcionario
     */
    public boolean excluir(Object objeto) {
        if(objeto == null){
            mensagem = "Funcionário nulo";
            return false;
        }
        Funcionario funcionario = (Funcionario) objeto;
        if (funcionario != null) {
            if (funcionario.getId() != null) {
                try {
                    dao.destroy(funcionario.getId());
                    mensagem = "Funcionario excluído com sucesso";
                    return true;
                } catch (Exception e) {
                    mensagem = "Erro no Banco de Dados";
                }
            } else {
                mensagem = "Funcionario não existe!";
            }
        } else {
            mensagem = "Funcionario nulo!";
        }
        return false;
    }

    /**
     *
     * @return Lista de todos os objetos funcionário existentes no banco de dados
     */
    public List listar() {
        List res = dao.findObjectEntities();
        return res;
    }

    /**
     *
     * @param funcionario
     * @return Lista com todos os objetos Funcionario existentes no banco de dados que tenham as características do objeto Fucionario fornecido como parâmetro
     */
    public List pesquisar(Object objeto) {
        if (objeto == null) {
            mensagem = "Funcionario nulo";
            return null;
        }
        Funcionario funcionario = (Funcionario) objeto;
        if (camposObrigatorios(funcionario) == 0){
            mensagem = "Um campo Obrigatório deve ser preenchido!";
            return null;
        }
        List res = new ArrayList<Funcionario>();
        if (funcionario.getId() != null) {
            Funcionario f = (Funcionario) dao.findObject(funcionario.getId());
            res.add(f);
            mensagem = "Apenas Um encontrado";
            return res;
        }
        res = dao.pesquisar(funcionario);
        if(res.isEmpty()){
            mensagem = "Nada encontrado!";
            /*
             * retornará null para facilitar a organização do controlador da janela
             * assim, toda vez q esse método retornar null, o controlador da janela
             * virá buscar a mensagem.
             */
            return null;
        }
        return res;
    }

    /**
     * @return the mensagem
     */
    public String getMensagem() {
        return mensagem;
    }

    /**
     * @param mensagem the mensagem to set
     */
    public void setMensagem(String mensagem) {
        this.mensagem = mensagem;
    }
}
